Haut Précedent Suivant Titre Sommaire

8.2.2 - Notions sur Linux en général et les serveurs Debian en particulier :

Le présent paragraphe regroupe les quelques astuces et notions importantes à connaître lors de l’utilisation d’un serveur Debian. Il permet la mise en place de quelques mécanismes permettant de gagner du temps lors de l’exploitation et de l’utilisation ultérieure des serveurs.
è	Phase d’installation :
     - la seule difficulté lors de l’installation d’un serveur Debian consiste a bien créer une partition différente pour les points de montage suivants :
           - « / » (au minimum 500Mo)
           - « /usr » (au minimum 1Go)
           - « /var » (au minimum 500Mo)
           - « /var/log » (au minimum 100Mo)
           - « /tmp » (si possible)
           - « /home » (dans le cas d’un serveur de fichiers)
     - il est interessant d’installer au minimum les packages suivants :
           - « vim » (vi évolué)
           - « less » (plus évolué que more)
           - « manpages-fr » (les pages du manuel en français)
           - « ssh » (pour une administration sécurisée du serveur)
           - « findutils » (pour pouvoir beneficier des commandes locate et updatedb)
           - « apt-file » (pour pouvoir beneficier des commandes apt-cache search/show)
           - « dlocate » (pour pouvoir beneficier de la commande dlocate permettant de retrouver le nom du package contenant un fichier donné ou encore d’obtenir le status des différents packages)

è	Mise en place de l’environnement français :
           - à l’issue de l’installation il suffit d’effectuer les opérations suivantes :
           	- dpkg-reconfigure locales
           	- export LANG= « fr_FR »
           	- locale

è	Suppression de l’affichage de la commande « dselect » au démarrage :
           - création d’un alias dselect= « dselect –expert »

è	Installation/MAJ des packages en mode ligne de commande :
           - utilisation de la commande apt-get install nom_package
           - utilisation de la commande apt-get update

è	Definition des sources de mise à jour Debian :
           - modification du fichier /etc/apt/sources.list. Le fichier du serveur Hercule est donné ci dessous :

deb http://ftp.fr.debian.org/debian stable main contrib non-free
deb http://ftp.fr.debian.org/debian testing main contrib non-free
deb http://ftp.fr.debian.org/debian-non-US/ stable/non-US main contrib non-free
# La ligne deb-src permet d’indiquer ou récupérer les sources ayant 
# permises la création d’un package donné à l’aide de la commande 
# apt-get source nom_package
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

è	Pour rechercher un libelle dans la liste des packages Debian :
      - apt-cache search libelle1 [libelle2 ... libellen]

è	Pour afficher la description d’un package Debian :
      - apt-cache show nom_package

è	Pour afficher la liste des packages Debian installés sur le système :
      - dpkg -l

è	Pour empêcher la mise à jour de packages (opération indispensable des que l’on recompile un package existaant sans changer son numéro de version) :
      - lancer dselect ;
      - se placer sur le package considéré et appuyer sur la touche « H » comme « Hold ».

8.2.2.A - Logiciels utiles a posséder sur le poste client Windows :

Dans le cas ou il est souhaité pouvoir administrer les différents serveurs Unix depuis une station Windows, il est utile d’installer les deux logiciels suivants :
      - Putty  : client SSH
      - WinSCP : client SCP (copie de fichiers sécurisée via SSH)

8.2.2.B - Les cages UNIX :

Linux comme tout UNIX permet « d’encager » les démons. La notion de cage consiste a changer la racine « / » pour un répertoire donné lors du lancement d’un démon. Cette nouvelle racine doit contenir toutes les ressources dont le démon a besoin pour fonctionner correctement mais uniquement celles-ci. De cette manière un pirate reussissant à exploiter une faille d’un démon donné ne peut avoir accès qu’aux données utilisées par le démon en question et jamais à l’ensemble du système.
Le mécanisme de mise en cage peut être inclus dans le fonctionnement même du démon (ex : Postfix) ou forcé au démarrage à l’aide de la commande suivante :
è	Chroot nouvelle_racine commande_a_executer_depuis_la_nouvelle_racine

Dans le cadre de la maquette les démons sont systématiquement encagés. Le script de création des cages est donné ci-dessous :
#!/bin/bash
#
# Emplacement : Maquette de test SGA
# Description : Script permettant la création de cages chroot
# Serveur     : Tous
# Copyright   : marc.boget@gendarmerie.org

echo "------------------------------------"
echo " Création de cages"
echo " sur noyau Debian 2.4.18
echo " Marc BOGET - Mastere SIO - "
echo " marc.boget@gendarmerie.org
echo "------------------------------------"
echo ""

# Fonction copiant les fichiers "de base"
function recopie_lien
{
	# Mise a zero des variables
	REP=""
	REP1=""
	LIEN=""
	FICLIE=""

	# Test pour savoir si c'est un lien symbolique
	LIEN=$(ls -al $FICHIER_TRAITE|cut -d'>' -f2|cut -d' ' -f2)
	if [ "$LIEN" != "" ]; then 
		REP=$(dirname $LIEN)
		FICLIE=$(basename $LIEN)
		# Test pour savoir si c'est dans le meme repertoire ou pas
		# Si le dirname ne peut etre trouvé, dirname renvoie '.' !!!
		if [ "$REP" == "." ]; then REP=$(dirname $FICHIER_TRAITE); fi
		# Traitement des liens relatifs
		REP1=""
		if [ "$(echo $REP|cut -c 1-2)" == ".." ]
		then
			REP1=$(dirname $FICHIER_TRAITE)
			REP=${REP1}/${REP}
		fi
		# Ne recopie le fichier pointé par le lien que s'il n'existe deja pas
		if ! test -f ${REP}/${FICLIE}
		then
			mkdir -p ${HOME_CAGE}${REP}
			rsync -a "${REP}/${FICLIE}" "${HOME_CAGE}${REP}/${FICLIE}" >/dev/null 2>&1
		fi
		if [ "$REP1" != "" ] 
		then 
			REP=$REP1
		else
			REP=$(dirname $FICHIER_TRAITE)
		fi
	else
		REP=$(dirname $FICHIER_TRAITE)
	fi	
}

function recopie_fichier
{
	if test $FICHIER_COPIE
	then
		echo "Traitement de $FICHIER_COPIE"
		REPFIC=$(dirname $FICHIER_COPIE)
		NOMFIC=$(basename $FICHIER_COPIE)
		mkdir -p "${HOME_CAGE}/${REPFIC}" >/dev/null 2>&1
		FICHIER_TRAITE=$FICHIER_COPIE
		recopie_lien
		if ! test -f ${HOME_CAGE}${REP}/${NOMFIC}
		then
			rsync -a "${FICHIER_COPIE}" "${HOME_CAGE}${REP}/${NOMFIC}" >/dev/null 2>&1
		fi
	fi
}

function creation_base
{
	umask 022
	
	echo "- Creation des repertoires"
	mkdir $HOME_CAGE             > /dev/null 2>&1
	mkdir ${HOME_CAGE}/var       > /dev/null 2>&1
	mkdir "${HOME_CAGE}/var/log" > /dev/null 2>&1
	mkdir "${HOME_CAGE}/var/run" > /dev/null 2>&1
	mkdir "${HOME_CAGE}/dev"     > /dev/null 2>&1
	mkdir "${HOME_CAGE}/lib"     > /dev/null 2>&1
	mkdir "${HOME_CAGE}/root"    > /dev/null 2>&1
	mkdir "${HOME_CAGE}/tmp"     > /dev/null 2>&1
	chmod 1777 "${HOME_CAGE}/tmp"
	
	echo "- Création des périphériques"
	cd "${HOME_CAGE}/dev"
	mknod null  c 1  3
	mknod random  c 1  8
	mknod urandom  c 1  9
	chown root:root null
	chmod 0666 null
	
	echo "- Copie des fichiers de base necessaires"
	for FICHIER_COPIE in /etc/shadow /etc/group /etc/passwd /etc/hosts /etc/protocols /etc/resolv.conf /etc/services
	do
		recopie_fichier
	done
	
	echo "- Copie des bibliotheques utilisées"
	for FICHIER_COPIE in $(ldd $DAEMON|cut -d'>' -f2|cut -d' ' -f2)
	do
		recopie_fichier
	done

	# Recuperation des fichiers ouverts au lancement du demon
	echo "- Arret du démon s'il tourne..."
	$COMMANDE_DAEMON stop >/dev/null 2>&1
	echo "- Lancement du demon pour recuperation des fichiers ouverts ..."
	strace $DAEMON start 2>/tmp/cage.temp
	sleep 2
	echo "- Arret du démon ..."
	killall $DAEMON >/dev/null 2>&1
	for FICHIER_COPIE in $(grep open /tmp/cage.temp|cut -d'"' -f2|grep -v "/dev/null" |grep -v "\/\.")
	do
		recopie_fichier
	done

	# Gestion du fichier /etc/localtime
	echo "- Gestion du fichier /etc/localtime"
	cd ${HOME_CAGE}
	FICHIER_COPIE="/usr/share/zoneinfo/Europe/Paris"
	recopie_fichier
	rm -f ${HOME_CAGE}/etc/localtime
	ln -s ../usr/share/zoneinfo/Europe/Paris etc/localtime

	# Copie du demon lui meme
	REP=$(dirname $DAEMON)
	mkdir -p ${HOME_CAGE}${REP}
	cp $DAEMON ${HOME_CAGE}$DAEMON
	return 0;
}

# Fonction creant la cage pour postfix
function creation_cage_postfix
{
# La mise en cage de postfix est automatique : cf directive queue_directory 
# dans le fichier /etc/postfix/main.cf por trouver la definition de la cage. Le 
# fichier /etc/postfix/master.cf permet de definir quels sont les services qui 
# doivent etre chrootés (signe '-' dans la colonne chroot) ou pas (signe 'n' 
# dans la colonne chroot)

# Le seul repertoire a creer est le repertoire ci dessous pour que le script
# de postfix puisse arriver a créer un lien : petit bug !!!

	mkdir -p ${HOME_CAGE}/usr/lib/zoneinfo
}

# Fonction creant la cage pour syslog
function creation_cage_syslog
{
	creation_base
}

# Fonction creant la cage pour apache
function creation_cage_apache
{
	creation_base
	
	# Copie des fichiers specifiques
	echo "- Copie des fichiers specifiques ..."
	for FICHIER_COPIE in $(find /usr/lib/libdb* /usr/lib/perl5* /var/www /usr/lib/cgi* /usr/lib/libsasl* /usr/lib/libgdbm* /usr/kerberos /usr/bin/perl* /usr/lib/apache-ssl /usr/share/ldapexplorer /etc/ldapexplorer 2>/dev/null)
	do
		recopie_fichier	
	done
}

function creation_cage_ssh
{
	creation_base
	
	# Creation des terminaux
	rsync -a /dev/pty* ${HOME_CAGE}/dev >/dev/null 2>&1
	rsync -a /dev/tty* ${HOME_CAGE}/dev >/dev/null 2>&1
	echo "- Copie des fichiers specifiques"
	
	# Creation des repertoires specifiques
	mkdir -p ${HOME_CAGE}/var/run/sshd
	chmod 755 ${HOME_CAGE}/var/run/sshd

	# Serveur et client SSH
	for FICHIER_COPIE in $(find /etc/ssh* /lib/libncurses.so.5* /usr/bin/ssh /bin/ls /lib/librt.so.1 /lib/libpthread.so.* /usr/bin/ssh 2>/dev/null)
	do
		recopie_fichier
	done

	# Pour permettre le bash
	for FICHIER_COPIE in $(find /bin/bash /lib/libncurses.so.5* 2>/dev/null)
	do
		recopie_fichier
	done

	# Pour permettre la commande ls
	for FICHIER_COPIE in $(find /bin/ls /lib/librt.so.1 /lib/libpthread.so.* 2>/dev/null)
	do
		recopie_fichier
	done

	# Pour permettre l'authentification PAM LDAP
	for FICHIER_COPIE in $(find /etc/ldap* /lib/libnss* /lib/libpam* /etc/pam* /etc/libnss* /lib/security/* /usr/lib/libldap* /usr/lib/liblber* /lib/libresolv* /etc/nsswitch.conf /etc/hosts.* /usr/lib/libsasl* /usr/lib/libssl* /lib/libdb2* 2>/dev/null)
	do
		recopie_fichier
	done
}

function creation_cage_ldap
{
	creation_base

	# Recopie des bases ldap
	for FICHIER_COPIE in $(find /var/lib/ldap 2>/dev/null)
	do
		recopie_fichier
	done

	# Pour permettre l'authentification PAM LDAP
	for FICHIER_COPIE in $(find /etc/ldap* /lib/libnss* /lib/libpam* /etc/pam* /etc/libnss* /lib/security/* /usr/lib/libldap* /usr/lib/liblber* /lib/libresolv* /etc/nsswitch.conf /etc/hosts.* /usr/lib/libsasl* /usr/lib/libssl* /lib/libdb2* 2>/dev/null)
	do
		recopie_fichier
	done
}

# Recuperation des arguments de la ligne de commande
PROG=$1

# Verification de la presence de l'utilitaire rsync permettant de copier 
# facilement les fichiers souhaités
test -f /usr/bin/rsync || PROG="rsync_absent"

# Recuperation des variables de traitement
echo -n "Repertoire de cage (sans / final) : "
read HOME_CAGE
echo -n "Nom du démon a encager : "
read NOM_DAEMON
DAEMON=$(which $NOM_DAEMON)
echo -n "Emplacement du démon ($DAEMON) : "
read DAEMON
if [ "$DAEMON" == "" ]; then DAEMON=$(which $NOM_DAEMON); fi
echo -n "Commande permettant d'arreter/redemarrer le demon (/etc/init.d/$NOM_DAEMON) : "
read COMMANDE_DAEMON
if [ "$COMMANDE_DAEMON" == "" ]; then COMMANDE_DAEMON="/etc/init.d/$NOM_DAEMON"; fi

case "$PROG" in
	postfix) creation_cage_postfix
			;;

	syslog) creation_cage_syslog
			;;

	apache)
			creation_cage_apache
			;;
	ssh)
			creation_cage_ssh
			;;
	ldap)
			creation_cage_ldap
			;;
	rsync_absent)
			echo "L'utilitaire rsync doit etre installé à l'aide de la commande apt-get install"
			;;
	*)
			echo "Usage : $0 postfix|syslog|apache|ssh|ldap"
			;;
esac
echo ""
echo "Votre serveur est desormais prét à etre encagé dans le repertoire $HOME_CAGE"
echo ""
echo "Pensez a modifier vos fichiers de demarrage (/etc/init.d/*) en rajoutant :"
echo "  - soit l'option de lancement du demon $NOM_DAEMON permettant d'indiquer"
echo "    le repertoire de cage"
echo "  - soit la commande chroot $HOME_CAGE $DAEMON"

8.2.2.C - La gestion des taches automatiques sous Unix :

Les systèmes d’exploitation Unix permettent d’automatiser des taches données. Cette automatisation s’effectue à l’aide de la commande « cron » qui examine le fichier « /etc/crontab » pour déterminer quelles actions effectuer ...

Le démon « anacron » présente la possibilité de gérer ces taches de manière journalière, hebdomadaire, mensuellement ou encore toutes les heures.

L’installation de ce démon (version 2.3-6) s’effectue de la façon suivante :
è	Apt-get install cron anacron 

Ce package dépend des packages suivants :
   - libc6 (version >= 2.2.2-2) ;
   - debianutils (version >= 1.7) ;
   - sysklogd ou system-log-daemon ;
   - exim ou mail-transport-agent.

Les taches à effectuer sont alors définies dans les répertoires « /etc/cron.hourly », « /etc/cron.daily », « /etc/cron.weekly » et « /etc/cron.monthly ».

Haut Précedent Suivant Titre Sommaire